import { defineStore } from 'pinia'
import { ref } from 'vue'
import { login as loginApi, getLoginUserInfo, logout as logoutApi } from '@/api/user'
import { message } from 'ant-design-vue'
import router from '@/router'

export const useUserStore = defineStore('user', () => {
  const isLoggedIn = ref(false)
  const userInfo = ref({
    username: '',
    avatar: '',
    role: 0,  // 默认普通用户
    id: null
  })
  
  // 登录
  async function login(loginData) {
    try {
      const res = await loginApi(loginData)
      setUser(res)
      // 根据用户角色跳转到不同页面
      if (res.role === 1) {
        // 管理员
        message.success('管理员登录成功')
        router.push('/admin')
      } else {
        // 普通用户
        message.success('登录成功')
        // 如果有重定向，则跳转到重定向地址，否则跳转到首页
        const redirect = router.currentRoute.value.query.redirect || '/'
        router.push(redirect)
      }
      return true
    } catch (error) {
      console.error('登录失败:', error)
      return false
    }
  }
  
  // 获取用户信息
  async function fetchUserInfo() {
    try {
      const res = await getLoginUserInfo()
      setUser(res)
      return res
    } catch (error) {
      console.error('获取用户信息失败:', error)
      return null
    }
  }
  
  // 设置登录状态和用户信息
  function setUser(user) {
    isLoggedIn.value = true
    userInfo.value = user
    // 保存token到本地存储，用于权限验证
    if (user.token) {
      localStorage.setItem('token', user.token)
    }
    // 保存用户信息到本地存储，用于持久化
    localStorage.setItem('userInfo', JSON.stringify(user))
    localStorage.setItem('isLoggedIn', 'true')
  }
  
  // 退出登录
  async function logout() {
    if (isLoggedIn.value && userInfo.value.id) {
      try {
        // 调用退出登录API
        await logoutApi({ id: userInfo.value.id })
      } catch (error) {
        console.error('退出登录失败:', error)
      }
    }
    
    // 无论API调用成功与否，都清除本地状态
    isLoggedIn.value = false
    userInfo.value = {
      username: '',
      avatar: '',
      role: 0,
      id: null
    }
    // 清除本地存储
    localStorage.removeItem('token')
    localStorage.removeItem('userInfo')
    localStorage.removeItem('isLoggedIn')
  }
  
  // 初始化时从本地存储获取用户信息
  function initUserState() {
    const storedIsLoggedIn = localStorage.getItem('isLoggedIn')
    const storedUserInfo = localStorage.getItem('userInfo')
    const token = localStorage.getItem('token')
    
    if (storedIsLoggedIn === 'true' && storedUserInfo && token) {
      isLoggedIn.value = true
      userInfo.value = JSON.parse(storedUserInfo)
      // 验证token是否有效
      fetchUserInfo().catch(() => {
        // 如果获取用户信息失败，说明token已过期，需要重新登录
        logout()
      })
    }
  }
  
  // 检查是否有管理员权限
  function isAdmin() {
    return userInfo.value.role === 1
  }
  
  return { 
    isLoggedIn, 
    userInfo, 
    login,
    fetchUserInfo,
    setUser, 
    logout, 
    initUserState,
    isAdmin
  }
}) 